using System.Collections.Generic;

namespace Rhinestone.Domain
{
    /// <summary>
    /// The <see cref="IUsersService"/> interface defines that consumers can
    /// use to get user instances.
    /// </summary>
    public interface IUsersService
    {
        /// <summary>
        /// Gets all users.
        /// </summary>
        /// <returns>An <see cref="IEnumerable{T}"/> instance that can be used to enumerate
        /// over all users.</returns>
        IEnumerable<IUser> GetAllUsers();

        /// <summary>
        /// Finds a user who has the specified user name.
        /// </summary>
        /// <param name="userName">string. The username to find.</param>
        /// <returns>The <see cref="IUser"/> matching the specified username, or a null reference
        /// if no user was found that matched the specified user name.</returns>
        IUser FindUserByName(string userName);

        /// <summary>
        /// Gets the current logged in user.
        /// </summary>
        /// <returns>A <see cref="IUser"/> instance of the current user.</returns>
        IUser GetCurrentUser();
    }
}